package com.scheduling.schedule.entity;

import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;

/**
 * 机器负荷记录实体类
 * 对应数据库表：machine_load
 *
 * @author 开发团队
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class MachineLoad {

    /**
     * 负荷记录ID（主键）
     */
    private String loadId;

    /**
     * 机器ID
     */
    private String machineId;

    /**
     * 生产任务ID
     */
    private String taskId;

    /**
     * 开始时间
     */
    private LocalDateTime startTime;

    /**
     * 结束时间
     */
    private LocalDateTime endTime;

    /**
     * 状态：计划、执行中、已完成
     */
    private String status;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 负荷百分比（扩展字段，用于算法计算）
     */
    private Integer loadPercentage;

    /**
     * 获取负荷持续时间（分钟）
     */
    public long getDurationMinutes() {
        if (startTime == null || endTime == null) {
            return 0;
        }
        return java.time.Duration.between(startTime, endTime).toMinutes();
    }

    /**
     * 检查是否与指定时间段有重叠
     */
    public boolean hasTimeOverlap(LocalDateTime checkStart, LocalDateTime checkEnd) {
        if (startTime == null || endTime == null || checkStart == null || checkEnd == null) {
            return false;
        }

        // 检查时间重叠：开始时间小于对方结束时间 且 结束时间大于对方开始时间
        return startTime.isBefore(checkEnd) && endTime.isAfter(checkStart);
    }

    /**
     * 检查是否为活跃状态
     */
    public boolean isActive() {
        return "执行中".equals(status) || "计划".equals(status);
    }

    /**
     * 检查是否已完成
     */
    public boolean isCompleted() {
        return "已完成".equals(status);
    }
} 